﻿using System.IO;

namespace WikiDoc.Reader
{
    /// <summary>
    /// 从给定的流中读取代码段，直到 }}} 符号结束
    /// </summary>
    public class CodePicker : TextReaderPipe
    {
        /// <summary>
        /// 初始化 CodePicker 类的新实例。
        /// </summary>
        /// <param name="baseReader">The base reader.</param>
        public CodePicker(TextReader baseReader)
            : base(baseReader)
        {
        }

        private bool _EOF;


        /// <summary>
        /// 从当前流中读取一行字符并将数据作为字符串返回。
        /// </summary>
        /// <returns>输入流的下一行，或者如果已读取了所有字符，则为 null。</returns>
        /// <exception cref="T:System.IO.IOException">发生 I/O 错误。 </exception>
        /// <exception cref="T:System.OutOfMemoryException">内存不足，无法为返回的字符串分配缓冲区。 </exception>
        /// <exception cref="T:System.ObjectDisposedException"><see cref="T:System.IO.TextReader"></see> 是关闭的。 </exception>
        /// <exception cref="T:System.ArgumentOutOfRangeException">下一行中的字符数大于 <see cref="F:System.Int32.MaxValue"></see></exception>
        public override string ReadLine()
        {
            if (_EOF)
            {
                return null;
            }

            string line = BaseReader.ReadLine();

            if (line == null)
            {
                return null;
            }

            if (line.Trim() == "}}}")
            {
                _EOF = true;
                return null;
            }

            return line;
        }


        /// <summary>
        /// Resets this instance.
        /// </summary>
        public override void Reset()
        {
            _EOF = false;
            base.Reset();
        }
    }
}